package com.laviedesfons.jhmtasc.types.models;

import com.laviedesfons.jhmtasc.annotations.binding.MFlaggedField;
import com.laviedesfons.jhmtasc.annotations.binding.MRootType;
import com.laviedesfons.jhmtasc.types.abstracts.Interface;
import com.laviedesfons.jhmtasc.types.externals.*;
import com.laviedesfons.jhmtasc.types.interfaces.InternalType;
import com.laviedesfons.jhmtasc.types.internals.PList;
import com.laviedesfons.jhmtasc.types.internals.PString;
import com.laviedesfons.jhmtasc.types.internals.PVoid;

/**
 * TODO get rid of MRootType annotation
 * the complex type can be deduced from the mandatory extends
 *
 * @author Romano
 */
@MRootType(camlType="'a jhmtasc_type")
public class AllType extends Interface<InternalType>{

    @MFlaggedField(flag = JInt.FLAG)
    static JInt jint;

    // TODO, check it's working only with PInt and remove
    @MFlaggedField(flag = "JIntOption")
    static JObj jintoption;

    @MFlaggedField(flag = JBool.FLAG)
    static JBool jbool;

    @MFlaggedField(flag = "JObj")
    static JObj jobj;

    @MFlaggedField(flag = "JVoid")
    static PVoid jvoid;

    @MFlaggedField(flag = JString.FLAG)
    static JString jstring;

    @MFlaggedField(flag = "JStringList")
    static PList<PString> string_list;

    @MFlaggedField(flag = JNup.FLAG)
    static JNup jnup;

    @MFlaggedField(flag = JArray.FLAG)
    static JArray jarray;

    @MFlaggedField(flag = JArrayList.FLAG)
    static JArrayList jarraylist;

    @MFlaggedField(flag = JHashMap.FLAG)
    static JHashMap jhashmap;

    // TODO, to remove
    @MFlaggedField(flag = "JSuperBindingsObj")
    static JObj jsuperbindingsobj;

    // TODO, to remove
    @MFlaggedField(flag = "JLocalCtx")
    static JObj jlocalctx;

    // TODO, to remove
    @MFlaggedField(flag = "JTags")
    static PList<Tag> tags;

    @MFlaggedField(flag = "JTag")
    static Tag tag;

    @MFlaggedField(flag = "JTagData")
    static TagData jtagdata;

    // TODO use a nuplist
    @MFlaggedField(flag = "JExport")
    static Export jexport;

    @MFlaggedField(flag = JAction.FLAG)
    static JAction jaction;

    @MFlaggedField(flag = "JActions")
    static PList<Action> jactions;

    @MFlaggedField(flag = Action.FLAG)
    static Action jactiontype;

    // TODO remove
    @MFlaggedField(flag = "JPushItem")
    static JObj jpushitem;

    // TODO remove
    @MFlaggedField(flag = "JPushItems")
    static JObj jpushitems;

    @MFlaggedField(flag = "JPushItemType")
    static JObj jpushitemtype;

    // TODO remove the followings, they are now parsed directly from ActionType
    @MFlaggedField(flag = "JFunc2Decl")
    static JObj jfunc2decl;

    @MFlaggedField(flag = "JFuncDecl")
    static JObj jfuncdecl;

    @MFlaggedField(flag = "JFlagsList")
    static JObj jflagslist;

    @MFlaggedField(flag = "JArgsList")
    static JObj jargslist2decl;

    @MFlaggedField(flag = "JFunc2Flag")
    static JObj jfunc2flag;

    @MFlaggedField(flag = "JTry")
    static JObj jtry;

    @MFlaggedField(flag = "JTryStyle")
    static JObj jtrystyle;

    @MFlaggedField(flag = "JTryStyleType")
    static JObj jtrystyletype;
}